namespace Test.ConsoleProgram.Algorithm.Solution
{
    [TestDescription("算法: 0647. 回文子串")]
    public class No0647_CountSubstrings : AbsBaseTestItem
    {
        /*
        给定一个字符串，你的任务是计算这个字符串中有多少个回文子串。
        具有不同开始位置或结束位置的子串，即使是由相同的字符组成，也会被视作不同的子串。
        */

        public override void OnTest()
        {
            Assert.TestExe(CountSubstrings, "abc", 3);
            Assert.TestExe(CountSubstrings, "aaa", 6);
        }

        public int CountSubstrings(string s)
        {
            int n = s.Length, ans = 0;
            for (int i = 0; i < 2 * n - 1; i++)
            {
                int l = i / 2, r = i / 2 + i % 2;
                while (l >= 0 && r < n && s[l] == s[r])
                {
                    l--;
                    r++;
                    ans++;
                }
            }
            return ans;
        }
    }
}
